package com.pf.java;

import sun.reflect.generics.tree.Tree;

import java.util.*;

/**
 * set
 *
 * @author pf
 * @data 2021/10/27-9:59
 */
public class set {
    public static void main(String[] args) {
        HashSet stud = new HashSet();
        stud.add("龙宝");
        stud.add("创世龙神");
        stud.add("aa");
        stud.add("bb");
        stud.add("cc");
        stud.add("dd");
       // stud.add("aa");// false
        stud.add(null);
        System.out.println(stud);

        LinkedHashSet teacher = new LinkedHashSet();
        teacher.add("刘备");
        teacher.add("关羽");
        teacher.add("张飞");
        teacher.add("刘备");// false
        teacher.add(null);
        System.out.println(teacher);


        //TreeSet
        TreeSet treeSet = new TreeSet();
        treeSet.add(12);
        treeSet.add(34);
        treeSet.add(78);
        treeSet.add(66);
        treeSet.add(26);
        treeSet.add(73);
        treeSet.add(75);

        System.out.println(treeSet);

        System.out.println(treeSet.first() + "-" + treeSet.last());
        System.out.println(treeSet.lower(66) + "-" + treeSet.higher(66));
        System.out.println(treeSet.headSet(66));//<
        System.out.println(treeSet.tailSet(66));//>=

        //自然排序
        TreeSet names = new TreeSet();
        names.add("Lily");
        names.add("John");
        names.add("Tony");
        names.add("Lisa");
        names.add("Mary");
        System.out.println(names);

        //没有实现Comparable接口
//
//        TreeSet objs = new TreeSet();
//        objs.add(new Object());
//        objs.add(new Object());
//        objs.add(new Object());


        // 类型不一样，没有可比性
//        TreeSet objs = new TreeSet();
//        objs.add("da");
//        objs.add(11);


        //定制排序
        TreeSet nums = new TreeSet(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Number n1 = (Number) o1;
                Number n2 = (Number) o2;
                if (n1 == null && n2 == null) {
                    return 0;
                } else if (n1 == null) {
                    return 1;
                } else if (n2 == null) {
                    return -1;
                } else if (n1.doubleValue() > n2.doubleValue()) {
                    return -1;
                } else if (n1.doubleValue() < n2.doubleValue()) {
                    return 1;
                } else {
                    return 0;
                }
            }
        });
        nums.add(null);
        nums.add(22);
        nums.add(65);
        nums.add(84.2);
        nums.add(90.3);
        System.out.println(nums);
    }
}
